package com.fengziyu.lib_recyclerview_fzy.login

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.fengziyu.lib_recyclerview_fzy.entity.LoginEntity
import com.fengziyu.lib_recyclerview_fzy.entity.LoginResponse
import com.fengziyu.lib_recyclerview_fzy.net.ApiService
import com.fengziyu.lib_recyclerview_fzy.net.RetrofitUtil
import com.google.gson.Gson
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class UserRepository {
    // 使用lazy初始化apiService，避免不必要的资源消耗
    private val apiService:ApiService by lazy { RetrofitUtil.getApiServiceToken { "token" } }

    // 返回类型改为MutableLiveData<LoginResponse?>，使其可以处理null值
    fun login(num:String , pwd: String): MutableLiveData<LoginResponse?> {
        // 创建MutableLiveData用于向UI层传递数据
        val loginResponse = MutableLiveData<LoginResponse?>()
        
        // 构建请求参数
        val map = mutableMapOf<String , String>()
        map["username"] = num     // 注意：这里使用"username"而不是"num"，要与服务器API保持一致
        map["password"] = pwd     // 使用"password"而不是"pwd"
        
        // 将Map转换为JSON字符串
        val toJson = Gson().toJson(map)
        Log.d("LoginRequest", "请求参数: $toJson")
        
        // 创建RequestBody对象
        val requestBody = toJson.toRequestBody("application/json;charset=UTF-8".toMediaTypeOrNull())
        
        // 发起网络请求
        apiService.login(requestBody).enqueue(object : Callback<LoginResponse>{
            override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
                Log.d("LoginRepository", "收到服务器响应")
                if(response.isSuccessful){
                    val body = response.body()
                    Log.d("LoginRepository", "响应成功: $body")
                    // 使用postValue而不是value，确保在主线程更新LiveData
                    loginResponse.postValue(body)
                }else{
                    // 请求失败时，创建一个带有错误信息的LoginResponse对象
                    // 使用LoginEntity()空构造函数创建默认实例
                    loginResponse.postValue(LoginResponse(500, LoginEntity(), "登录失败: ${response.message()}"))
                }
            }

            override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
                // 网络请求失败时（如网络断开等），同样创建一个错误响应
                loginResponse.postValue(LoginResponse(500, LoginEntity(), "网络请求失败: ${t.message}"))
            }
        })
        return loginResponse
    }
}